home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Other Stuff / Other Stuff ’97 / PowerOS Development / basic kernel source / debug_console.c < prev    next >
C/C++ Source or Header  |  1997-06-26  |  4KB  |  172 lines

  1. /*
  2.     debug_console.c
  3.     a source file for PowerOS
  4.     copyright 1996-1997 by Ben Martz
  5.     all rights reserved world wide
  6.  
  7.     ANY AND ALL MODIFICATIONS TO THIS SOURCE MUST CREDIT THE ORIGINAL
  8.     AUTHOR, BEN MARTZ (benmartz@ic.net), AND MUST BE GIVEN TO THE AUTHOR
  9.     FOR INTEGRATION INTO THE MAIN PowerOS SOURCE TREE. THANK YOU FOR YOUR
  10.     COOPERATION!
  11. */
  12.  
  13. #include "poweros_types.h"
  14. #include "debug_video.h"
  15. #include "debug_console.h"
  16. #include "debug_console_font.h"
  17.  
  18. #define KCHAR_WIDTH    6    /* these include and v spacing */
  19. #define    KCHAR_HEIGHT    10
  20.  
  21. ConsolePrivateData    consolePrivate;
  22.  
  23. void cinit(void) {
  24.     int    i;
  25.     
  26.     consolePrivate.width = vgetwidth();
  27.     consolePrivate.height = vgetheight();
  28.             
  29.     consolePrivate.cols = consolePrivate.width / KCHAR_WIDTH;
  30.     consolePrivate.rows = consolePrivate.height / KCHAR_HEIGHT;
  31.     
  32.     if(vgetdepth() > 8) {
  33.         consolePrivate.forecolor = 0xFFFFFFFF;
  34.         consolePrivate.backcolor = 0L;
  35.     } else {
  36.         consolePrivate.forecolor = 0L;
  37.         consolePrivate.backcolor = 0xFFFFFFFF;
  38.     }
  39.     
  40.     cgotoxy(1,1);
  41.     
  42.     cputchar('C');cputchar('O');cputchar('N');cputchar('S');cputchar('O');cputchar('L');cputchar('E');cputchar('\n');
  43.     
  44.     /* some debugging info */
  45.     dprintf("debug_console - %d bit %dx%d video -> %dx%d console\n",vgetdepth(),vgetwidth(),
  46.         vgetheight(),consolePrivate.cols,consolePrivate.rows);
  47.     
  48.     for(i = 1; i <= consolePrivate.cols; i++) {
  49.         cputchar('*');
  50.     }
  51.     cputchar('\n');
  52. }
  53.  
  54. void cputchar(u_char c) {
  55.     char    count;
  56.     int    offh = 0, offv = 0;
  57.     long    ec, ec2;
  58.     
  59.     switch(c) {
  60.         case '\t':
  61.             ctab();
  62.             break;
  63.         case '\n':
  64.             cnewline();
  65.             break;
  66.         default:
  67.             c *= 2;
  68.             ec = KERNEL_FONT[c];
  69.             ec2 = KERNEL_FONT[c + 1];
  70.         
  71.             for(count = 0; count < 32; count++) {
  72.                 if(ec & (1 << count)) {
  73.                     cputcharpixel(offh, offv, consolePrivate.forecolor);
  74.                 } else {
  75.                     cputcharpixel(offh, offv, consolePrivate.backcolor);
  76.                 }
  77.                 
  78.                 if(++offh > KCHAR_WIDTH - 1) {
  79.                     offh = 0;
  80.                     offv++;
  81.                 }
  82.             }
  83.             
  84.             for(count = 32; count < 60; count++) {
  85.                 if(ec2 & (1 << (count - 32))) {
  86.                     cputcharpixel(offh, offv, consolePrivate.forecolor);
  87.                 } else {
  88.                     cputcharpixel(offh, offv, consolePrivate.backcolor);
  89.                 }
  90.                 
  91.                 if(++offh > KCHAR_WIDTH - 1) {
  92.                     offh = 0;
  93.                     offv++;
  94.                 }
  95.             }
  96.         
  97.             cgotoxy(consolePrivate.colpos + 1, consolePrivate.rowpos);
  98.             break;
  99.     }
  100. }
  101.  
  102. void cputcharpixel(int offsetH, int offsetV, u_long value) {
  103.     vputpixel(consolePrivate.xpos + offsetH, consolePrivate.ypos + offsetV, value);
  104. }
  105.  
  106. void cgotoxy(int x, int y) {
  107.     int tmpx, tmpy;
  108.     
  109.     tmpx = x;
  110.     tmpy = y;
  111.     
  112.     if(tmpx < 1) tmpx = 1;
  113.     if(tmpy < 1) tmpy = 1;
  114.     
  115.     if(tmpx > consolePrivate.cols) {
  116.         tmpx = 1;
  117.         tmpy++;
  118.     }
  119.     
  120.     if(tmpy > consolePrivate.rows) {
  121.         tmpx = 1;
  122.         tmpy = consolePrivate.rows;
  123.         vscrollup(KCHAR_HEIGHT);
  124.     }
  125.     
  126.     consolePrivate.colpos = tmpx;
  127.     consolePrivate.rowpos = tmpy;
  128.     
  129.     consolePrivate.xpos = (tmpx - 1) * KCHAR_WIDTH;
  130.     consolePrivate.ypos = (tmpy - 1) * KCHAR_HEIGHT;
  131. }
  132.  
  133. long cgetforecolor(void) {
  134.     return consolePrivate.forecolor;
  135. }
  136.  
  137. void csetforecolor(long color) {
  138.     consolePrivate.forecolor = color;
  139. }
  140.  
  141. long cgetbackcolor(void) {
  142.     return consolePrivate.backcolor;
  143. }
  144.  
  145. void csetbackcolor(long color) {
  146.     consolePrivate.backcolor = color;
  147. }
  148.  
  149. int cgetx(void) {
  150.     return consolePrivate.colpos;
  151. }
  152.  
  153. int cgety(void) {
  154.     return consolePrivate.rowpos;
  155. }
  156.  
  157. int cgetxmax(void) {
  158.     return consolePrivate.cols;
  159. }
  160.  
  161. int cgetymax(void) {
  162.     return consolePrivate.rows;
  163. }
  164.  
  165. void ctab(void) {
  166.     cgotoxy(consolePrivate.colpos + 4, consolePrivate.rowpos);
  167. }
  168.  
  169. void cnewline(void) {
  170.     cgotoxy(1, consolePrivate.rowpos + 1);
  171. }
  172.